Private Sub GetFind$Controller$ (keyword As String, value As String)
	' #Version = v2
	' #Desc = Find $Controller$ by id, cid, code or name
	' #Elements = ["$controller$", ":keyword", ":value"]

	Select keyword
		Case "id"
			If Not(IsNumber(value)) Then
				ReturnUnprocessableEntity
			Else
				QueryProductByKeyword(Array("p.id = ?"), Array(value))
			End If
		Case "$category$_id", "cid", "catid"
			If Not(IsNumber(value)) Then
				ReturnUnprocessableEntity
			Else
				QueryProductByKeyword(Array("c.id = ?"), Array(value))
			End If
		Case "$category$_name", "$category$"
			QueryProductByKeyword(Array("c.$category$_name = ?"), Array(value))
		Case "$controller$_code", "code"
			QueryProductByKeyword(Array("p.$controller$_code = ?"), Array(value))		
		Case "$controller$_name", "name"
			QueryProductByKeyword(Array("$controller$_name LIKE ?"), Array("%" & value & "%"))
		Case Else
			ReturnInvalidKeywordValue
	End Select
	DB.Close
	ReturnApiResponse
End Sub

Private Sub Query$Controller$ByKeyword (Condition As List, Value As List)
	DB.Table = "tbl_$controller$ p"
	DB.Select = Array("p.*", "c.$category$_name")
	DB.Join = DB.CreateORMJoin("tbl_$category$ c", "p.$category$_id = c.id", "")
	DB.setWhereValue(Condition, Value)
	DB.Query
	HRM.ResponseCode = 200
	HRM.ResponseData = DB.Results
End Sub

Private Sub ReturnUnprocessableEntity
	WebApiUtils.ReturnErrorUnprocessableEntity(Response)
End Sub

Private Sub ReturnInvalidKeywordValue
	HRM.ResponseCode = 400
	HRM.ResponseError = "Invalid keyword value"
End Sub